bitkeeper revision 1.993 (40d6a9ddBgr-KXWbCA_-rEDpeCQHQw)
authorkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>
Mon, 21 Jun 2004 09:26:53 +0000 (09:26 +0000)
committerkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>
Mon, 21 Jun 2004 09:26:53 +0000 (09:26 +0000)
Fix pdb.

xen/arch/x86/pdb-stub.c
xen/include/xen/softirq.h

index cca507c9b999860f4440bafa346a973c4b8ab9bc..c24a86ccdc5b992b79bce0fc84441d0fceb59b8f 100644 (file)
@@ -20,6 +20,7 @@
 #include <asm/pdb.h>
 #include <xen/list.h>
 #include <xen/serial.h>
+#include <xen/softirq.h>
 
 #undef PDB_DEBUG_TRACE
 #ifdef PDB_DEBUG_TRACE
@@ -1287,10 +1288,15 @@ int pdb_handle_exception(int exceptionVector,
     return 0;
 }
 
-void pdb_key_pressed(u_char key, void *dev_id, struct pt_regs *regs) 
+void __pdb_key_pressed(void)
 {
+    struct pt_regs *regs = (struct pt_regs *)get_execution_context();
     pdb_handle_exception(KEYPRESS_EXCEPTION, regs);
-    return;
+}
+
+void pdb_key_pressed(u_char key, void *dev_id, struct pt_regs *regs) 
+{
+    raise_softirq(DEBUGGER_SOFTIRQ);
 }
 
 void initialize_pdb()
@@ -1323,6 +1329,7 @@ void initialize_pdb()
     /* Acknowledge any spurious GDB packets. */
     pdb_put_char('+');
 
+    open_softirq(DEBUGGER_SOFTIRQ, __pdb_key_pressed);
     add_key_handler('D', pdb_key_pressed, "enter pervasive debugger");
 
     pdb_initialized = 1;
index 619c86b989e5aaa5d6218b6ebb4006ca18ba8a06..8e45dadf1888b046ac5648dd03323a573b91a175 100644 (file)
@@ -11,6 +11,9 @@ enum
 {
     AC_TIMER_SOFTIRQ=0,
     NEW_TLBFLUSH_CLOCK_PERIOD_SOFTIRQ,
+#ifdef XEN_DEBUGGER
+    DEBUGGER_SOFTIRQ,
+#endif
     SCHEDULE_SOFTIRQ, /* NB. This must come last or do_softirq() will break! */
     NR_SOFTIRQS
 };